import sys def suffix_array_construction(s): n = len(s) sa = list(range(n)) ra = [ord(s[i]) for i in range(n)] k, maxi = 1, max(300, n) while k < n: for kk in [k, 0]: # count sort on k and 0 respectively c = [0]*maxi for i in range(n): c[ra[i+kk] if i+kk